#ifndef _H_TREE
#define _H_TREE

#include <iostream>
#include <stdexcept>
#include <cstdlib>
#include <vector>


using namespace std;

template <typename T>
struct Node{
	Node(T val):value(val),left(NULL),right(NULL){}

	T value;
	Node* left;
	Node* right;
};


template <typename T>
class Tree {
	public:
		Tree():__root(NULL){}
		bool insert(T val);
		void print_tree();

	private:
		void post_order_traversal(Node<T>* root,vector<bool>& path);
		void in_order_traversal(Node<T>* root,vector<bool>& path);
		void pre_order_traversal(Node<T>* root,vector<bool>& path);
		Node<T>* __root;
};

#include "tree-inl.h"
#endif
